using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using DataTransferObject;
using Business;

namespace Presentation
{
    public partial class FrmMuonTra : Form
    {
        clsThuThuBUS ThuThuBUS = new clsThuThuBUS();
        clsThayDoiQuyDinhBUS ThayDoiQuyDinhBUS = new clsThayDoiQuyDinhBUS();
        clsThayDoiQuyDinhDTO ThayDoiQuyDinhDTO = new clsThayDoiQuyDinhDTO();

        private static String MaTheHienTai = "";
        private static bool MaTheHopLe = false;

        private static String MaTheTraAnPham = "";
        private List<String> DKCB_DangMuon;
        static long TienPhatTraSach = 0;

        public FrmMuonTra()
        {
            InitializeComponent();
        }

        private void FrmMuonTra_Load(object sender, EventArgs e)
        {
            LoadForm(); //Load dữ liệu form.
            RefreshFormMuonSach();
            LoadDanhSachLoaiSachHong();

            //long TienCocPhieuMuon = ThuThuBUS.CTMuonTraBUS.TongGiaTatCaSachThuocPhieuMuon("P1");
            //int a = 1;
        }

        #region Các phương thức tạo mã tự động

        public String DinhdangMACH(String MACH)
        {
            if (MACH.Length == 1)
                MACH = "P00" + MACH;
            else if (MACH.Length == 2)
                MACH = "P0" + MACH;
            else if (MACH.Length == 3)
                MACH = "P" + MACH;
            return MACH;
        }

        private int TimMaCauHoi()
        {
            int sl = 1;
            int dem = 0;
            DataTable tbl = new DataTable();
            clsPhieuMuonSachBUS PhieuMuonSachBUS = new clsPhieuMuonSachBUS();

            tbl = PhieuMuonSachBUS.LayDanhSachPhieuMuon();
            foreach (DataRow dr in tbl.Rows)
            {
                int ma1 = Convert.ToInt16(Tim_CatChuoi(dr["MAPHIEUMUON"].ToString()));
                dem++;
                int ma2 = Convert.ToInt16(Tim_CatChuoi(dr["MAPHIEUMUON"].ToString()));

                if (dem != ma2)
                {
                    return dem;
                }
                else
                {
                    sl++;
                }

            }
            return sl;
        }


        public String Tim_CatChuoi(String Chuoicantim)
        {
            int vitri = 0;
            vitri = Chuoicantim.IndexOf(Chuoicantim, 0);
            if (vitri != -1)
                Chuoicantim = Chuoicantim.Remove(0, 2);
            return Chuoicantim;
        }

        #endregion

        #region Mượn-Trả ấn phẩm.

        //Phương thức thu hồi sách.
        private void ThuHoiAnPham()
        {
            DataGridViewSelectedRowCollection RowCollectTion;

            RowCollectTion = dgvAPM.SelectedRows;
            foreach (DataGridViewRow Row in RowCollectTion)
            {
                dgvAPM.Rows.Remove(Row);
            }
            lblAPMTongSoLuong.Text = dgvAPM.Rows.Count.ToString(); //Cập nhật lại số lượn sách.
            if (dgvAPM.Rows.Count == 0)
            {
                btnAPMThuHoi.Enabled = false;
                btnAPMGhiMuon.Enabled = false;
            }
            else
            {
                btnAPMThuHoi.Enabled = true;
                btnAPMGhiMuon.Enabled = true;
                btnAPMTimMaAnPham.Enabled = true;
                txtAPMMaAnPham.Enabled = true;
            }
        }

        #region Phương thức đưa dữ liệu lên form.

        //Phương thức đưa dữ liệu lên form.
        private void LoadForm()
        {
            dtpAPMNgayMuon.Text = DateTime.Today.ToShortDateString();
            HienThiButton(false);
            LayDanhSachQuyDinh();
            KiemTraDocGiaTonTai(); //Kiểm tra độc giả hiện có tồn tại ko.
            btnAPMGhiMuon.Enabled = false;
            btnAPMThuHoi.Enabled = false;
            txtAPMMaAnPham.Text = "";
            txtAPMMaThe.Text = "";
            txtngaytraap.Text = DateTime.Today.ToShortDateString();
            btntraap.Enabled = false;
        }
        #endregion

        //Phương thức lấy các quy định.
        private void LayDanhSachQuyDinh()
        {
            DataTable dtThayDoiQuyDinh;
            Object[] obj;

            //Lấy table Thay đổi quy định.
            dtThayDoiQuyDinh = new DataTable();
            dtThayDoiQuyDinh = ThayDoiQuyDinhBUS.DanhSachThayDoiQuyDinh();

            obj = new Object[10];
            obj = dtThayDoiQuyDinh.Rows[0].ItemArray;
            ThayDoiQuyDinhDTO.TuoiToiDa = (int)obj[0];
            ThayDoiQuyDinhDTO.TuoiToiThieu = (int)obj[1];
            ThayDoiQuyDinhDTO.ThoiHanThe = (int)obj[2];
            ThayDoiQuyDinhDTO.SoNgayMuonToiDa = (int)obj[3];
            ThayDoiQuyDinhDTO.SoSachMuonToiDa = (int)obj[4];
            ThayDoiQuyDinhDTO.TienPhatSachTre = Convert.ToInt64(obj[5]);
        }

        #region Các phương thức ẩn-hiện Button, Textbox, Tạo cột cho DataGrid.

        //(Ẩn/hiện) Button.
        private void HienThiButton(bool dieukien)
        {
            dtpAPMNgayMuon.Enabled = dieukien;
        }
        #endregion

        //Phương thức kiểm tra thẻ còn hạn sử dụng ko.
        private bool KiemTraThoiHanThe(clsDocGiaDTO obj)
        {
            return ThuThuBUS.DocGiaBUS.KiemTraThoiHanThe(obj);
        }

        //Phương thức kiểm tra độc giả có tồn tại hay ko trước khi mượn.
        private void KiemTraDocGiaTonTai()
        {
            if (MaTheHopLe)
            {
                txtAPMMaAnPham.Enabled = true;
                btnAPMTimMaAnPham.Enabled = true;
            }
            else
            {
                txtAPMMaAnPham.Enabled = false;
                btnAPMTimMaAnPham.Enabled = false;
            }
        }

        //Phương thức tìm ấn phẩm.
        private void TimAnPham()
        {
            clsTapChiDTO TapChiDTO;

            TapChiDTO = new clsTapChiDTO();
            TapChiDTO.MaTapChi = txtAPMMaAnPham.Text.Trim();
            TapChiDTO = ThuThuBUS.TapChiBUS.TimTapChi(TapChiDTO);

            if (TapChiDTO.MaTapChi == null)
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy ấn phẩm!!\n\n-Hoặc ấn phẩm đã được mượn!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                //Kiểm tra nếu ấn phẩm đã có trong DataGrid thì không thêm vào nữa.
                bool check;

                check = KiemTraAnPhamDataGrid(TapChiDTO.MaTapChi, dgvAPM, "MAPMaTapChi");
                if (!check)
                    DevComponents.DotNetBar.MessageBoxEx.Show("-Ấn phẩm đã có sẵn trong danh sách mượn.\n\n-Vui lòng nhập mã ấn phẩm khác!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else //Ấn phẩm không có trong DataGrid.
                    HienThiThongTinMotAnPham(TapChiDTO);
            }

            KiemTraSoAnPhamMuonToiDa(); //Kiểm tra số ấn phẩm mượn tối đa.
            if (dgvAPM.Rows.Count > 0)
            {
                btnAPMThuHoi.Enabled = true;
                btnAPMGhiMuon.Enabled = true;
            }
        }

        //Phương thức kiểm tra số ấn phẩm mượn tối đa trong 1 lần.
        private void KiemTraSoAnPhamMuonToiDa()
        {
            int SoAnPhamDaMuon;

            //Lấy số ấn phẩm hiện có trong DataGrid.
            SoAnPhamDaMuon = dgvAPM.Rows.Count;
            if (SoAnPhamDaMuon >= ThayDoiQuyDinhDTO.SoSachMuonToiDa)
            {
                txtAPMMaAnPham.Enabled = false;
                btnAPMTimMaAnPham.Enabled = false;

                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả một lần chỉ được phép mượn tối đa " + ThayDoiQuyDinhDTO.SoSachMuonToiDa + " ấn phẩm !",
                                                    "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        //Phương thức Kiểm tra trùng mã ấn phẩm trong DataGrid.
        private bool KiemTraAnPhamDataGrid(String MaAnPham, DevComponents.DotNetBar.Controls.DataGridViewX dgv, String CotKiemTra)
        {
            DataGridViewRowCollection RowCollectTion;

            RowCollectTion = dgv.Rows;
            foreach (DataGridViewRow Row in RowCollectTion)
            {
                DataGridViewCellCollection Cells;

                Cells = Row.Cells;
                if (Cells[CotKiemTra].Value != null && Cells[CotKiemTra].Value.ToString().Trim().ToUpper().Equals(MaAnPham))
                {
                    return false;
                }
            }
            return true;
        }

        //Phương thức hiển thị thông tin tạp chí lên DataGrid.
        private void HienThiThongTinMotAnPham(clsTapChiDTO TapChiDTO)
        {
            int STT;
            DateTime NgayMuon;

            STT = dgvAPM.Rows.Count + 1;
            NgayMuon = Convert.ToDateTime(dtpAPMNgayMuon.Text);
            dgvAPM.Rows.Add(STT, TapChiDTO.MaTapChi, TapChiDTO.TenTapChi, NgayMuon.ToShortDateString());
            lblAPMTongSoLuong.Text = STT.ToString();
        }

        //Tìm độc giả theo mã thẻ độc giả.
        private void TimDocGia()
        {
            DataTable dt;
            Object[] obj;
            bool check;

            try
            {

                String MaThe = txtAPMMaThe.Text.Trim();
                dt = ThuThuBUS.DocGiaBUS.TimDocGia(MaThe);

                if (dt.Rows.Count > 0) //Nếu tìm thấy độc giả.
                {
                    obj = new Object[20];
                    obj = dt.Rows[0].ItemArray;

                    //Kiểm tra thẻ có còn hạn sử dụng ko.
                    check = false;
                    check = KiemTraThoiHanThe(LayDocGiaTuObj(obj));
                    if (!check) //Nếu thể hết hạn.
                    {
                        DevComponents.DotNetBar.MessageBoxEx.Show("-Thẻ độc giả đã hết hạn sử dụng!!",
                                                         "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        HienThiThongTinDocGia(obj);
                        MaTheHopLe = false;
                        btnAPMGhiMuon.Enabled = false;
                        btnAPMThuHoi.Enabled = false;
                        return;
                    }
                    else
                    {
                        btnAPMGhiMuon.Enabled = true;
                        btnAPMThuHoi.Enabled = true;
                    }
                    //------------------------------------------------------

                    //Hiển thị thông tin độc giả.
                    HienThiThongTinDocGia(obj); //Hiển thị thông tin độc giả.
                    MaTheHopLe = true;
                }
                else
                {
                    DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy độc giả!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    SetDefaultDocGia();
                    MaTheHopLe = false;
                    btnAPMGhiMuon.Enabled = false;
                    btnAPMThuHoi.Enabled = false;
                }
            }
            catch
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy độc giả!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                SetDefaultDocGia();
                MaTheHopLe = false;
                btnAPMGhiMuon.Enabled = false;
                btnAPMThuHoi.Enabled = false;
            }
            if (dgvAPM.Rows.Count > 0)
            {
                btnAPMGhiMuon.Enabled = true;
                btnAPMThuHoi.Enabled = true;
            }
            else
            {
                btnAPMGhiMuon.Enabled = false;
                btnAPMThuHoi.Enabled = false;
            }
        }

        //Tìm độc giả theo mã thẻ độc giả TextChanged.
        private void TimDocGiaTextChanged()
        {
            DataTable dt;
            Object[] obj;
            bool check;

            try
            {
                String MaThe = txtAPMMaThe.Text.Trim();
                dt = ThuThuBUS.DocGiaBUS.TimDocGia(MaThe);

                if (dt.Rows.Count > 0) //Nếu tìm thấy độc giả.
                {
                    obj = new Object[20];
                    obj = dt.Rows[0].ItemArray;

                    //Kiểm tra thẻ có còn hạn sử dụng ko.
                    check = false;
                    check = KiemTraThoiHanThe(LayDocGiaTuObj(obj));
                    if (!check) //Nếu thể hết hạn.
                    {
                        //DevComponents.DotNetBar.MessageBoxEx.Show("-Thẻ độc giả đã hết hạn sử dụng!!",
                        //"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        //HienThiThongTinDocGia(obj);
                        MaTheHopLe = false;
                        btnAPMGhiMuon.Enabled = false;
                        btnAPMThuHoi.Enabled = false;
                        return;
                    }
                    else
                    {
                        btnAPMGhiMuon.Enabled = true;
                        btnAPMThuHoi.Enabled = true;
                    }
                    //------------------------------------------------------

                    //Hiển thị thông tin độc giả.
                    HienThiThongTinDocGia(obj); //Hiển thị thông tin độc giả.
                    MaTheHopLe = true;
                }
                else
                {
                    // DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy độc giả!!",
                    //"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    SetDefaultDocGia();
                    MaTheHopLe = false;
                    btnAPMGhiMuon.Enabled = false;
                    btnAPMThuHoi.Enabled = false;
                }
            }
            catch
            {
                //DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy độc giả!!",
                //"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                SetDefaultDocGia();
                MaTheHopLe = false;
                btnAPMGhiMuon.Enabled = false;
                btnAPMThuHoi.Enabled = false;
            }

            if (lblAPMHoTen.Text.Trim() != "")
            {
                txtAPMMaAnPham.Enabled = true;
                btnAPMTimMaAnPham.Enabled = true;
            }
            else
            {
                txtAPMMaAnPham.Enabled = false;
                btnAPMTimMaAnPham.Enabled = false;
            }

            if (dgvAPM.Rows.Count > 0)
            {
                btnAPMGhiMuon.Enabled = true;
                btnAPMThuHoi.Enabled = true;
            }
            else
            {
                btnAPMGhiMuon.Enabled = false;
                btnAPMThuHoi.Enabled = false;
            }

        }

        //Phương thức lấy độc giả từ đối tượng obj.
        private clsDocGiaDTO LayDocGiaTuObj(Object[] obj)
        {
            clsDocGiaDTO DocGiaDTO;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = obj[0].ToString();
            DocGiaDTO.NgayLapThe = Convert.ToDateTime(obj[4]);
            DocGiaDTO.NgayHetHan = Convert.ToDateTime(obj[5]);

            return DocGiaDTO;
        }

        //Phương thức đặt giá trị mặc định cho thông tin độc giả trên form.
        private void SetDefaultDocGia()
        {
            lblAPMHoTen.Text = "";
            lblAPMGioiTinh.Text = "";
            lblAPMLoaiDG.Text = "";
            lblAPMNgayLapThe.Text = "";
            lblAPMNgayHetHan.Text = "";
            lblAPMTongNo.Text = "";
            piclblAPMHinhDocGia.ImageLocation = null;
            MaTheHienTai = "";
        }

        //Phương thức hiển thị thông tin độc giả.
        private void HienThiThongTinDocGia(Object[] obj)
        {
            MaTheHienTai = obj[0].ToString();
            lblAPMHoTen.Text = obj[1].ToString();
            lblAPMGioiTinh.Text = obj[2].ToString();
            lblAPMLoaiDG.Text = obj[3].ToString();
            lblAPMNgayLapThe.Text = Convert.ToDateTime(obj[4]).ToShortDateString();
            lblAPMNgayHetHan.Text = Convert.ToDateTime(obj[5]).ToShortDateString();
            lblAPMTongNo.Text = obj[6].ToString();
            String urlHinh;
            urlHinh = Application.StartupPath + @"\" + obj[7].ToString();
            piclblAPMHinhDocGia.ImageLocation = urlHinh; //Gán hình vào PictureBox.
        }

        private void btnAPMTimMaThea_Click(object sender, EventArgs e)
        {
            TimDocGia();
            KiemTraDocGiaTonTai();
            KiemTraSoAnPhamMuonToiDa();
        }

        //Hiển thị textbox.
        private void HienThiTextBox(bool dk)
        {
            txtAPMMaThe.Enabled = dk;
            //txtapm
        }

        private void btnAPMTimMaAnPham_Click(object sender, EventArgs e)
        {
            TimAnPham();
        }

        private void btnAPMGhiMuon_Click(object sender, EventArgs e)
        {
            MuonTapChi();
            XoaTrangDataGrid();
            ThuHoiAnPham();
        }

        //Phương thức mượn tạp chí.
        private void MuonTapChi()
        {
            clsMuonTapChiDTO MuonTapChiDTO;
            clsTapChiDTO TapChiDTO;
            DataGridViewRowCollection RowCollectTion;
            MuonTapChiBUSResult rs;

            rs = MuonTapChiBUSResult.DAOERROR;
            RowCollectTion = dgvAPM.Rows;
            foreach (DataGridViewRow Row in RowCollectTion)
            {
                DataGridViewCellCollection Cells;

                Cells = Row.Cells;
                if (Cells["MAPMaTapChi"].Value != null)
                {
                    MuonTapChiDTO = new clsMuonTapChiDTO();
                    MuonTapChiDTO.MaThe = MaTheHienTai;
                    MuonTapChiDTO.MaTapChi = Cells["MAPMaTapChi"].Value.ToString();
                    MuonTapChiDTO.NgayMuon = Convert.ToDateTime(Cells["MAPNgayMuon"].Value);

                    rs = ThuThuBUS.MuonTapChiBUS.ThemMuonTapChi(MuonTapChiDTO);

                    TapChiDTO = new clsTapChiDTO();
                    TapChiDTO.MaTapChi = MuonTapChiDTO.MaTapChi;
                    TapChiDTO = ThuThuBUS.TapChiBUS.TimTapChi(TapChiDTO);
                    TapChiDTO.TrangThai = "Đã Mượn"; //Cập nhật lại trạng thái đã mượn cho tạp chí.

                    TapChiBUSResult rss = ThuThuBUS.TapChiBUS.SuaTrangThaiTapChi(TapChiDTO);
                }
            }

            if (rs == MuonTapChiBUSResult.OK)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Đã ghi mượn thành công!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không ghi mượn được!!",
                                                    "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Xóa tất cả các dòng trong DataGrid.
        private void XoaTrangDataGrid()
        {
            dgvAPM.Rows.Clear();
        }

        private void btnAPMThuHoi_Click(object sender, EventArgs e)
        {
            ThuHoiAnPham(); //Thu hồi sách.
        }

        private void btnsothetratc_Click(object sender, EventArgs e)
        {
            TimDocGiaMuonAnPham();
        }

        //Tìm ấn phẩm độc giả mượng.
        private void TimAPDocGiaMuon()
        {
            clsTapChiDTO TapChiDTO;
            clsDocGiaDTO DocGiaDTO;
            DataTable dt;
            Object[] obj;

            TapChiDTO = new clsTapChiDTO();
            TapChiDTO.MaTapChi = txtmaaptratc.Text.Trim();
            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = MaTheTraAnPham;
            dt = new DataTable();
            dt = ThuThuBUS.MuonTapChiBUS.LayTapChiDocGiaMuon(TapChiDTO, DocGiaDTO);

            if (dt.Rows.Count > 0)
            {
                if (dgvtratc.Rows.Count > 0)
                {
                    DevComponents.DotNetBar.MessageBoxEx.Show("-Vui lòng trả ấn phẩm hiện tại trước khi nhập mã ấn phẩm khác!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                obj = new Object[20];
                obj = dt.Rows[0].ItemArray;

                int STT;
                DateTime NgayMuon;

                STT = dgvtratc.Rows.Count;
                TapChiDTO.MaTapChi = obj[1].ToString();
                TapChiDTO.TenTapChi = obj[2].ToString();
                NgayMuon = Convert.ToDateTime(obj[3]);

                //Kiểm tra nếu ấn phẩm đã có trong DataGrid thì không thêm vào nữa.
                bool check;

                check = KiemTraAnPhamDataGrid(TapChiDTO.MaTapChi, dgvtratc, "MAPTRA");
                if (!check)
                    DevComponents.DotNetBar.MessageBoxEx.Show("-Ấn phẩm đã có sẵn trong danh sách trả.\n\n-Vui lòng nhập mã ấn phẩm khác!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else //Ấn phẩm không có trong DataGrid.                   
                {
                    dgvtratc.Rows.Add(STT, TapChiDTO.MaTapChi, TapChiDTO.TenTapChi, NgayMuon.ToShortDateString()); //Hiển thị thông tin ấn phẩm mượn.
                    btntraap.Enabled = true;
                }
            }
            else
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả không mượn ấn phẩm này.\n\n-Vui lòng kiểm tra lại mã ấn phẩm.",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                btntraap.Enabled = false;
            }

            if (dgvtratc.Rows.Count > 0)
                btntraap.Enabled = true;
            else
                btntraap.Enabled = false;
        }

        //Tìm độc giả đã mượn ấn phẩm.
        private void TimDocGiaMuonAnPham()
        {
            DataTable dt;
            clsDocGiaDTO DocGiaDTO;
            Object[] obj;

            try
            {
                DocGiaDTO = new clsDocGiaDTO();
                DocGiaDTO.MaThe = txtsothetratc.Text.Trim();
                dt = ThuThuBUS.MuonTapChiBUS.LayDanhSachTapChiDocGiaMuon(DocGiaDTO);

                if (dt.Rows.Count > 0) //Nếu tìm thấy độc giả.
                {
                    obj = new Object[20];
                    obj = dt.Rows[0].ItemArray;

                    //Hiển thị thông tin độc giả.
                    HienThiThongTinDocGiaTraAP(obj); //Hiển thị thông tin độc giả.
                    MaTheTraAnPham = DocGiaDTO.MaThe;
                }
                else
                {
                    DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chưa mượn tạp chí!!\n\n-Vui lòng kiểm tra lại mã độc giả",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    XoaDocGiaTraAnPhamHienThi();
                    MaTheTraAnPham = "";
                }
            }
            catch
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chưa mượn tạp chí!!\n\n-Vui lòng kiểm tra lại mã độc giả",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                XoaDocGiaTraAnPhamHienThi();
                MaTheTraAnPham = "";
            }
        }

        //Tìm độc giả đã mượn ấn phẩm TextChanged.
        private void TimDocGiaMuonAnPhamTextChanged()
        {
            DataTable dt;
            clsDocGiaDTO DocGiaDTO;
            Object[] obj;

            try
            {
                DocGiaDTO = new clsDocGiaDTO();
                DocGiaDTO.MaThe = txtsothetratc.Text.Trim();
                dt = ThuThuBUS.MuonTapChiBUS.LayDanhSachTapChiDocGiaMuon(DocGiaDTO);

                if (dt.Rows.Count > 0) //Nếu tìm thấy độc giả.
                {
                    obj = new Object[20];
                    obj = dt.Rows[0].ItemArray;

                    //Hiển thị thông tin độc giả.
                    HienThiThongTinDocGiaTraAP(obj); //Hiển thị thông tin độc giả.
                    MaTheTraAnPham = DocGiaDTO.MaThe;
                }
                else
                {
                    //DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chưa mượn tạp chí!!\n\n-Vui lòng kiểm tra lại mã độc giả",
                    // "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    XoaDocGiaTraAnPhamHienThi();
                    MaTheTraAnPham = "";
                }
            }
            catch
            {
                //DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chưa mượn tạp chí!!\n\n-Vui lòng kiểm tra lại mã độc giả",
                //"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                XoaDocGiaTraAnPhamHienThi();
                MaTheTraAnPham = "";
            }
        }

        //Phương thức hiển thị thông tin độc giả trả ấn phẩm.
        private void HienThiThongTinDocGiaTraAP(Object[] obj)
        {
            lblhotentratc.Text = obj[4].ToString();
            lblgioitinhtratc.Text = obj[5].ToString();
            lblnghenghieptratc.Text = obj[6].ToString();
            lblngaylapthetratc.Text = Convert.ToDateTime(obj[7]).ToShortDateString();
            lblngayhethantratc.Text = Convert.ToDateTime(obj[8]).ToShortDateString();
            lbltongnotratc.Text = obj[9].ToString();
            String urlHinh;
            urlHinh = Application.StartupPath + @"\" + obj[10].ToString();
            pchinhtratc.ImageLocation = urlHinh; //Gán hình vào PictureBox.
        }

        private void btnmaaptra_Click(object sender, EventArgs e)
        {
            TimAPDocGiaMuon();
        }

        private void TraTapChi()
        {
            clsMuonTapChiDTO MuonTapChiDTO;

            MuonTapChiDTO = new clsMuonTapChiDTO();
            MuonTapChiDTO.MaTapChi = txtmaaptratc.Text.Trim();
            MuonTapChiDTO.MaThe = MaTheTraAnPham;
            MuonTapChiBUSResult rs = this.ThuThuBUS.MuonTapChiBUS.XoaMuonTapChi(MuonTapChiDTO);

            if (rs == MuonTapChiBUSResult.OK)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Đã trả xong ấn phẩm!!",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                clsTapChiDTO TapChiDTO = new clsTapChiDTO();
                TapChiDTO.MaTapChi = MuonTapChiDTO.MaTapChi;
                CapNhatTrangThaiDaMuonChoTapChi(TapChiDTO);
                XoaDataGridAnPhamDaTraXong();
                btntraap.Enabled = false;
            }

            else
            {
                //btntraap.Enabled = true;
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không trả được!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void XoaDataGridAnPhamDaTraXong()
        {
            dgvtratc.Rows.Clear();
        }

        private void CapNhatTrangThaiDaMuonChoTapChi(clsTapChiDTO TapChiDTO)
        {
            TapChiDTO.TrangThai = "Chưa Mượn";
            this.ThuThuBUS.TapChiBUS.SuaTrangThaiTapChi(TapChiDTO);
        }

        private void btntraap_Click(object sender, EventArgs e)
        {
            TraTapChi();
        }

        private void txtsothetratc_TextChanged(object sender, EventArgs e)
        {
            TimDocGiaMuonAnPhamTextChanged();
        }

        //Xóa thông tin độc giả trả ấn phẩm hiển thị.
        private void XoaDocGiaTraAnPhamHienThi()
        {
            lblhotentratc.Text = "";
            lblgioitinhtratc.Text = "";
            lblnghenghieptratc.Text = "";
            lblngaylapthetratc.Text = "";
            lblngayhethantratc.Text = "";
            lbltongnotratc.Text = "";
        }

        private void txtAPMMaThe_TextChanged(object sender, EventArgs e)
        {
            TimDocGiaTextChanged();
            //KiemTraDocGiaTonTai();
            //KiemTraSoAnPhamMuonToiDa();
        }
        #endregion







        #region Mượn Sách

        //Phương thức Hiện-Ẩn tất cả các TextBox trên form Mượn sách.
        private void HienTatCaTextBoxFormMuonSach(bool x)
        {
            txtSMSoThe.Enabled = x;
            txtSMDKCB.Enabled = x;
            txtSMNgayMuon.Enabled = x;
            txtSMNgayHetHan.Enabled = x;
            txtSMTienCoc.Enabled = x;
            txtSMTienNo.Enabled = x;
        }

        //Phương thức Hiện-Ẩn tất cả các Button trên form Mượn sách.
        private void HienTatCaButtonFormMuonSach(bool x)
        {
            btnSMGhiMuon.Enabled = x;
          //  btnSMPhieu.Enabled = x;
            btnSMThuHoi.Enabled = x;
            btnSMTimDKCB.Enabled = x;
            btnSMTimSoThe.Enabled = x;
        }

        //Phương thức Xóa tất cả các TextBox trên form Mượn sách.
        private void XoaTatCaTextBoxFormMuonSach()
        {
            txtSMSoThe.Text = "";
            txtSMDKCB.Text = "";
            txtSMNgayMuon.Text = "";
            txtSMNgayHetHan.Text = "";
            txtSMTienCoc.Text = "";
            txtSMTienNo.Text = "";
        }

        //Phương thức Xóa thông tin độc giả trên form Mượn sách.
        private void XoaThongTinDocGiaFormMuonSach()
        {
            lblSMHoTen.Text = "";
            lblSMGioiTinh.Text = "";
            lblSMNgheNghiep.Text = "";
            lblSMNgayLapThe.Text = "";
            lblSMNgayHetHan.Text = "";
            lblSMTongNo.Text = "";
            picSMHinhDocGia.ImageLocation = "";
        }

        //Phương thức Xóa DataGrid Danh sách sách mượn trên form Mượn sách.
        private void XoaDataGridDanhSachSachMuonFormMuonSach()
        {
            dgvSM.Rows.Clear();
            lblSMTongSoLuong.Text = "";
        }

        //Phương thức Refresh Form Mượn sách.
        private void RefreshFormMuonSach()
        {
            chkSMMuonVeNha.Checked = false;
            HienTatCaTextBoxFormMuonSach(false);
            HienTatCaButtonFormMuonSach(false);
            XoaThongTinDocGiaFormMuonSach();
            XoaTatCaTextBoxFormMuonSach();
            XoaDataGridDanhSachSachMuonFormMuonSach();
            SetNgayFormMuonSach();

            txtSMSoThe.Enabled = true;
            btnSMTimSoThe.Enabled = true;

            //DateTime ngay1 = new DateTime(2001, 12, 1);
            //DateTime ngay2 = new DateTime(2002, 1, 1);

            //MessageBox.Show(ngay1.AddDays(2).ToShortDateString());

            //clsDocGiaDTO obj = new clsDocGiaDTO();
            //obj.MaThe = "306071002";
            //obj.HoTen = "Nhật Huy";
            //obj.GioiTinh = "Nam";
            //obj.MaLDG = "DG01";
            //obj.NgayLapThe = DateTime.Today;
            //obj.NgayHetHan = DateTime.Today;
            //obj.TongNo = 500000;
            //HienThiThongTinDocGiaLenFormMuonSach(obj);

            //clsDocGiaDTO obj = new clsDocGiaDTO();
            //obj.MaThe = "306071002";
            //MessageBox.Show(ThuThuBUS.DocGiaBUS.KiemTraDocGiaMuonSachQuaHan(obj).ToString());
        }

        //Phương thức tìm độc giả.
        private clsDocGiaDTO TimDocGia(String MaThe)
        {
            DataTable dtDocGia;
            clsDocGiaDTO DocGiaDTO;

            dtDocGia = new DataTable();
            dtDocGia = ThuThuBUS.DocGiaBUS.TimDocGia(MaThe);

            if (dtDocGia.Rows.Count > 0)
            {
                Object[] obj;

                obj = dtDocGia.Rows[0].ItemArray;
                DocGiaDTO = new clsDocGiaDTO();
                DocGiaDTO.MaThe = obj[0].ToString();
                DocGiaDTO.HoTen = obj[1].ToString();
                DocGiaDTO.GioiTinh = obj[2].ToString();
                DocGiaDTO.MaLDG = obj[8].ToString();
                DocGiaDTO.NgayLapThe = Convert.ToDateTime(obj[4]);
                DocGiaDTO.NgayHetHan = Convert.ToDateTime(obj[5]);
                DocGiaDTO.TongNo = Convert.ToInt64(obj[6]);
                DocGiaDTO.HinhAnh = obj[7].ToString();

                return DocGiaDTO;
            }

            return null;
        }

        //Phương thức hiển thị thông tin độc giả lên form Mượn sách.
        private void HienThiThongTinDocGiaLenFormMuonSach(clsDocGiaDTO DocGiaDTO)
        {
            lblSMHoTen.Text = DocGiaDTO.HoTen;
            lblSMGioiTinh.Text = DocGiaDTO.GioiTinh;
            lblSMNgheNghiep.Text = ThuThuBUS.DocGiaBUS.TimTenLDGTheoMaLDG(DocGiaDTO.MaLDG);
            lblSMNgayLapThe.Text = DocGiaDTO.NgayLapThe.ToShortDateString();
            lblSMNgayHetHan.Text = DocGiaDTO.NgayHetHan.ToShortDateString();
            lblSMTongNo.Text = DocGiaDTO.TongNo.ToString();
            String url;
            url = Application.StartupPath + @"\" + DocGiaDTO.HinhAnh;
            picSMHinhDocGia.ImageLocation = url;

            txtSMTienNo.Text = DocGiaDTO.TongNo.ToString();
        }

        //Phương thức tìm thông tin độc giả mượn sách.
        private void TimThongTinDocGiaMuonSach(String MaThe)
        {
            clsDocGiaDTO DocGiaDTO;
            bool check;

            DKCB_DangMuon = new List<String>();

            //Tìm độc giả.
            DocGiaDTO = TimDocGia(MaThe);
            if (DocGiaDTO == null)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy độc giả!!",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            //--------------------------------------------
            //Kiểm tra thời hạn thẻ.
            check = false;
            check = KiemTraThoiHanThe(DocGiaDTO);
            if (check == false)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Thẻ độc giả đã hết hạn sử dụng!!",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //--------------------------------------------
            //Kiểm tra sách mượn quá hạn.
            check = false;
            check = ThuThuBUS.DocGiaBUS.KiemTraDocGiaMuonSachQuaHan(DocGiaDTO);
            if (check == false)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả có sách mượn quá hạn!!",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //--------------------------------------------
            //Kiểm tra số lượng sách mà độc giả đang mượn.
            check = false;
            check = ThuThuBUS.DocGiaBUS.KiemTraSoQuyenSachDocGiaDangMuon(DocGiaDTO);
            if (check == false)
            {
                XoaDataGrid(dgvSM);
                ThemSachDaMuonVaoDataGrid(MaThe);
                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả đã mượn " + ThayDoiQuyDinhDTO.SoSachMuonToiDa + " quyển sách!!\n\n-Theo quy định độc giả chỉ được phép mượn tối đa " + ThayDoiQuyDinhDTO.SoSachMuonToiDa + " quyển sách. \n\n  +Để có thể mượn sách độc giả cần phải trả ít nhất 1 quyển sách.",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //txtSMSoThe.Text = "";
                return;
            }

            DKCB_DangMuon = new List<String>();
            HienThiThongTinDocGiaLenFormMuonSach(DocGiaDTO);
            XoaDataGrid(dgvSM);
            ThemSachDaMuonVaoDataGrid(MaThe);
        }

        
        //Phương thức kiểm tra trạng thái form Mượn sách.
        private void KiemTraVaSetTrangThaiFormMuonSach()
        {
            if (lblSMHoTen.Text == "")
            {
                btnSMGhiMuon.Enabled = false;
                btnSMThuHoi.Enabled = false;
                txtSMDKCB.Enabled = false;
                btnSMTimDKCB.Enabled = false;
            }
            else
            {
                btnSMGhiMuon.Enabled = true;
                btnSMThuHoi.Enabled = true;
                txtSMDKCB.Enabled = true;
                btnSMTimDKCB.Enabled = true;
            }

            if (DKCB_DangMuon.Count > 0)
            {
                btnSMGhiMuon.Enabled = true;
                btnSMThuHoi.Enabled = true;
            }
            else
            {
                btnSMGhiMuon.Enabled = false;
                btnSMThuHoi.Enabled = false;
            }

            lblSMTongSoLuong.Text = dgvSM.Rows.Count.ToString();

            //if (lblSMHoTen.Text.Equals("")) //Nếu không tồn tại độc giả hợp lệ.
            //{
            //    HienTatCaButtonFormMuonSach(false);
            //    btnSMTimSoThe.Enabled = true;
            //}
            //else //Nếu tồn tại độc giả hợp lệ.
            //{
            //    if (dgvSM.Rows.Count > 0)
            //    {
            //        HienTatCaButtonFormMuonSach(true);
            //    }
            //    else
            //    {
            //        HienTatCaButtonFormMuonSach(false);
            //        btnSMTimSoThe.Enabled = true;
            //    }

            //    txtSMDKCB.Enabled = true;
            //    btnSMTimDKCB.Enabled = true;
            //}
        }

        //Phương thức thêm một quyển sách mượn vào DataGrid.
        private void ThemSachMuonVaoDataGrid(DataTable dtSachMuon)
        {
            if (dtSachMuon.Rows.Count > 0)
            {
                Object[] obj;
                int STT;
                clsSachDTO SachDTO;
                clsTuaSachDTO TuaSachDTO;
                String NgayMuon;
                String NgayHetHan;

                obj = new Object[2];
                obj = dtSachMuon.Rows[0].ItemArray;
                STT = dgvSM.Rows.Count + 1;
                SachDTO = new clsSachDTO();
                SachDTO.DKCB = obj[0].ToString();
                TuaSachDTO = new clsTuaSachDTO();
                TuaSachDTO.TenTuaSach = obj[1].ToString();
                TuaSachDTO.Gia = Convert.ToInt64(obj[2]);
                NgayMuon = txtSMNgayMuon.Text;
                NgayHetHan = txtSMNgayHetHan.Text;

                dgvSM.Rows.Add(STT, SachDTO.DKCB, TuaSachDTO.TenTuaSach, NgayMuon, NgayHetHan, TuaSachDTO.Gia);
                lblSMTongSoLuong.Text = dgvSM.Rows.Count.ToString();

                DKCB_DangMuon.Add(SachDTO.DKCB);
                TinhTienCocMuonSach();
            }
            else
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy sách.\n\n-Vui lòng nhập mã sách khác.",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Phương thức thêm sách đã mượn quyển sách mượn vào DataGrid.
        private void ThemSachDaMuonVaoDataGrid(String MaThe)
        {
            DataTable dtSachMuon = new DataTable();
            clsDocGiaDTO DocGiaDTO = new clsDocGiaDTO();

            DocGiaDTO.MaThe = MaThe;
            dtSachMuon = ThuThuBUS.PhieuMuonSachBUS.LayDanhSachSachDocGiaDangMuon(DocGiaDTO);
            if (dtSachMuon.Rows.Count > 0)
            {
                Object[] obj;
                int STT;
                clsSachDTO SachDTO;
                clsTuaSachDTO TuaSachDTO;
                String NgayMuon;
                String NgayHetHan;

                obj = new Object[20];
                
                XoaDataGridDanhSachSachMuonFormMuonSach();
                for (int i = 0; i < dtSachMuon.Rows.Count; i++)
                {
                    obj = dtSachMuon.Rows[i].ItemArray;

                    STT = i + 1;
                    SachDTO = new clsSachDTO();
                    SachDTO.DKCB = obj[6].ToString();
                    TuaSachDTO = new clsTuaSachDTO();
                    TuaSachDTO.TenTuaSach = obj[11].ToString();
                    TuaSachDTO.Gia = Convert.ToInt64(obj[12]);
                    NgayMuon = txtSMNgayMuon.Text;
                    NgayHetHan = txtSMNgayHetHan.Text;

                    dgvSM.Rows.Add(STT, SachDTO.DKCB, TuaSachDTO.TenTuaSach, NgayMuon, NgayHetHan, TuaSachDTO.Gia);
                    lblSMTongSoLuong.Text = dgvSM.Rows.Count.ToString();
                }

                
            }
            //else
            //{
            //    DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy sách, hoặc sách đang được mượn.\n\n-Vui lòng nhập mã sách khác.",
            //                                                         "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //}
        }

        //Phương thức đặt ngày mượn và ngày hết hạn trên form Mượn sách.
        private void SetNgayFormMuonSach()
        {
            txtSMNgayMuon.Text = DateTime.Today.ToShortDateString();
            txtSMNgayHetHan.Text = ThuThuBUS.DocGiaBUS.TimNgayHetHanMuonSach(DateTime.Today).ToShortDateString();
        }

        //Phương thức tìm sách để mượn.
        private void TimSachDeMuon(String DKCB)
        {
            DataTable dtSachMuon;

            dtSachMuon = new DataTable();
            dtSachMuon = ThuThuBUS.DocGiaBUS.TimSachChuaMuonTheoMa(DKCB);
            ThemSachMuonVaoDataGrid(dtSachMuon);
            //int a = 1;
        }

        //Phương thức kiểm tra số sách mượn tối đa trên form mượn sách.
        private bool KiemTraSoSachMuonToiDaTrenFormMuonSach()
        {
            //Lấy số sách mà độc giả đã mượn.
            clsDocGiaDTO DocGiaDTO;
            int SoSachDocGiaDaMuon;
            int SoSachDocGiaMuonMuon;

            ThayDoiQuyDinhDTO.SoSachMuonToiDa = Convert.ToInt32(ThayDoiQuyDinhBUS.DanhSachThayDoiQuyDinh().Rows[0].ItemArray[4]);

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = txtSMSoThe.Text.Trim();
            SoSachDocGiaDaMuon = ThuThuBUS.PhieuMuonSachBUS.SoQuyenSachDocGiaDangMuon(DocGiaDTO);
            SoSachDocGiaMuonMuon = DKCB_DangMuon.Count;

            if (SoSachDocGiaDaMuon + SoSachDocGiaMuonMuon >= ThayDoiQuyDinhDTO.SoSachMuonToiDa)
                return false;
            return true;
        }

        //Phương thức kiểm tra trùng mã sách trong DataGrid trong form Mượn Sách.
        private bool KiemTraTrungDKCBTrongDataGridFormMuonSach(String DKCB, DevComponents.DotNetBar.Controls.DataGridViewX dgv, String CotKiemTra)
        {
            return KiemTraAnPhamDataGrid(DKCB, dgv, CotKiemTra);
        }

        //Phương thức tìm sách để mượn trên form Mượn sách.
        private void TimSachDeMuonTrenFormMuonSach(String DKCB)
        {
            bool check;
            clsDocGiaDTO DocGiaDTO;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = txtSMSoThe.Text.Trim();

            check = false;
            check = KiemTraSoSachMuonToiDaTrenFormMuonSach();
            if (!check)
            {
                int SoSachDaMuon;
                int SoSachMuonMuon;

                SoSachDaMuon = ThuThuBUS.PhieuMuonSachBUS.SoQuyenSachDocGiaDangMuon(DocGiaDTO); //Số sách đã mượn.
                SoSachMuonMuon = DKCB_DangMuon.Count; //Số sách muốn mượn

                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chỉ được phép mượn tối đa " + ThayDoiQuyDinhDTO.SoSachMuonToiDa + " quyển sách\n\n-Độc giả hiện còn đang mượn " + SoSachDaMuon + " quyển sách chưa trả.\n\n-Độc giả chỉ có thể mượn thêm " + (ThayDoiQuyDinhDTO.SoSachMuonToiDa - SoSachDaMuon) + " quyển sách nữa.",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //else
                //    DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chỉ được phép mượn tối đa " + ThayDoiQuyDinhDTO.SoSachMuonToiDa + " quyển sách",
                //                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            check = false;
            check = KiemTraTrungDKCBTrongDataGridFormMuonSach(DKCB, dgvSM, "SMDKCB");
            if (!check)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Sách đã có sẵn trong danh sách mượn",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            TimSachDeMuon(DKCB);
        }

        //Phương thức mượn sách trên form Mượn sách.
        private void MuonSach()
        {
            clsPMuonSachDTO PhieuMuonSachDTO;
            clsCTMuonTraDTO CTMuonSachDTO;

            CTMuonTraResult rs;
            //long TienDatCocTruoc;
            //long TienDatCocHienTai;
            //long TongTienDatCoc;

            //Thêm dữ liệu vào bảng phiếu mượn sách.
            PhieuMuonSachDTO = new clsPMuonSachDTO();
            PhieuMuonSachDTO.MaPhieuMuon = DinhdangMACH(TimMaCauHoi().ToString());
            PhieuMuonSachDTO.MaThe = txtSMSoThe.Text.Trim();
            PhieuMuonSachDTO.NgayMuon = DateTime.Today;
            PhieuMuonSachDTO.TienNo = 0;

            //TienDatCocTruoc = ThuThuBUS.CTMuonTraBUS.TongGiaTatCaSachThuocPhieuMuon(PhieuMuonSachDTO.MaPhieuMuon);
            //TienDatCocHienTai = Convert.ToInt64(txtSMTienCoc.Text);
            //TongTienDatCoc = TienDatCocTruoc + TienDatCocHienTai;
            PhieuMuonSachDTO.TienDatCoc = Convert.ToInt64(txtSMTienCoc.Text); //TongTienDatCoc;
            PhieuMuonSachDTO.NgayHetHan = Convert.ToDateTime(txtSMNgayHetHan.Text);

            ThuThuBUS.PhieuMuonSachBUS.ThemPhieuMuon(PhieuMuonSachDTO);
            //-------------------------------------------------------------

            //Thêm dữ liệu vào bảng Chi tiết mượn sách.
            rs = CTMuonTraResult.DAOERROR;

            for (int i = 0; i < DKCB_DangMuon.Count; i++)
            {
                CTMuonSachDTO = new clsCTMuonTraDTO();

                CTMuonSachDTO.MaPhieuMuon = PhieuMuonSachDTO.MaPhieuMuon;
                CTMuonSachDTO.MaSach = DKCB_DangMuon[i];
                CTMuonSachDTO.NgayTra = Convert.ToDateTime(txtSMNgayHetHan.Text);
                CTMuonSachDTO.SoNgayMuon = ThayDoiQuyDinhDTO.SoNgayMuonToiDa;
                CTMuonSachDTO.TienPhat = 0;
                CTMuonSachDTO.TrangThaiMT = "Đang Mượn";

                rs = ThuThuBUS.CTMuonTraBUS.ThemCTMuonTra(CTMuonSachDTO);

                //Cập nhật lại trạng thái mượn của quyển sách.
                bool check = ThuThuBUS.SachBUS.CapNhatTrangThaiDaMuonChoSach(CTMuonSachDTO.MaSach);

                clsDocGiaDTO DocGiaDTO = new clsDocGiaDTO();
                DataTable dtDocGia = new DataTable();

                DocGiaDTO.MaThe = PhieuMuonSachDTO.MaThe;
                dtDocGia = ThuThuBUS.PhieuMuonSachBUS.LayDanhSachSachDocGiaDangMuon(DocGiaDTO);
                if (dtDocGia.Rows.Count > 0)
                {
                    DocGiaDTO.TinhTrangNo = "Nợ Tài Liệu";
                    ThuThuBUS.DocGiaBUS.UpdateTinhTrangNo(DocGiaDTO);
                }                    
            }

            if (rs == CTMuonTraResult.OK)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Đã ghi mượn thành công!!",
                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                DKCB_DangMuon = new List<String>();
            }
            else
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không ghi mượn được!!",
                                                    "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Phương thức thu hồi sách trên form Mượn sách.
        private void ThuHoiSach(DevComponents.DotNetBar.Controls.DataGridViewX dgv)
        {
            dgv.Rows.Clear();
            DKCB_DangMuon = new List<String>();
            txtSMDKCB.Text = "";
            //txtSMNgayMuon.Text = "";
            //txtSMNgayHetHan.Text = "";
            txtSMTienCoc.Text = "";
            txtSMTienNo.Text = "";
            btnSMGhiMuon.Enabled = false;
            

            //Xóa thông tin độc giả.
            lblSMHoTen.Text = "";
            lblSMGioiTinh.Text = "";
            lblSMNgheNghiep.Text = "";
            lblSMNgayLapThe.Text = "";
            lblSMNgayHetHan.Text = "";
            lblSMTongNo.Text = "";
        }

        private void btnSMTimSoThe_Click(object sender, EventArgs e)
        {
            String MaThe;

            MaThe = txtSMSoThe.Text.Trim();
            TimThongTinDocGiaMuonSach(MaThe);
            KiemTraVaSetTrangThaiFormMuonSach();
        }

        private void chkSMMuonVeNha_CheckedChanged(object sender, EventArgs e)
        {
            TinhTienCocMuonSach();
        }

        private void btnSMTimDKCB_Click(object sender, EventArgs e)
        {
            String DKCB;

            DKCB = txtSMDKCB.Text.Trim();
            TimSachDeMuonTrenFormMuonSach(DKCB);
            KiemTraVaSetTrangThaiFormMuonSach();
        }

        private void dgvSM_SelectionChanged(object sender, EventArgs e)
        {
            TinhTienCocMuonSach();

            clsDocGiaDTO DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = txtSMSoThe.Text.Trim();
            
            int SoSachDaMuon;
            int SoSachMuonMuon;

            SoSachDaMuon = ThuThuBUS.PhieuMuonSachBUS.SoQuyenSachDocGiaDangMuon(DocGiaDTO); //Số sách đã mượn.
            SoSachMuonMuon = DKCB_DangMuon.Count; //Số sách muốn mượn
            txtSTTienPhat.Text = TienPhatTraSach.ToString();

            //if (SoSachMuonMuon + SoSachDaMuon > ThayDoiQuyDinhDTO.SoSachMuonToiDa)
            //{
            //    btnSMThuHoi.Enabled = false;
            //    btnSMGhiMuon.Enabled = false;
            //    btnSMPhieu.Enabled = false;
            //}
            //else
            //{
            //    btnSMThuHoi.Enabled = true;
            //    btnSMGhiMuon.Enabled = true;
            //    btnSMPhieu.Enabled = true;
            //}

            //if (SoSachMuonMuon + SoSachDaMuon > ThayDoiQuyDinhDTO.SoSachMuonToiDa)
            //{
            //    btnSMThuHoi.Enabled = false;
            //    btnSMGhiMuon.Enabled = false;
            //    btnSMPhieu.Enabled = false;
            //}
            //else
            //{
            //    btnSMThuHoi.Enabled = true;
            //    btnSMGhiMuon.Enabled = true;
            //    btnSMPhieu.Enabled = true;
            //}

        }

        private void TinhTienCocMuonSach()
        {
            if (dgvSM.SelectedRows.Count > 0 && chkSMMuonVeNha.Checked)
            {
                long TienCoc = 0;
                for (int i = 0; i < DKCB_DangMuon.Count; i++)
                {
                    String DKCB = DKCB_DangMuon[i];
                    long Gia = ThuThuBUS.SachBUS.TimGiaCuaMotQuyenSachTheoMa(DKCB);

                    TienCoc = TienCoc + Gia;
                }
                txtSMTienCoc.Text = TienCoc.ToString();
            }
            else
            {
                txtSMTienCoc.Text = "0";
            }
        }

        private void btnSMGhiMuon_Click(object sender, EventArgs e)
        {
            MuonSach();
            RefreshFormMuonSach();
            KiemTraVaSetTrangThaiFormMuonSach();
        }

        private void btnSMThuHoi_Click(object sender, EventArgs e)
        {
            ThuHoiSach(dgvSM);
            KiemTraVaSetTrangThaiFormMuonSach();
        }
        #endregion




        //Phương thức tìm độc giả trả sách.
        private void TimDocGiaTraSach(String MaThe)
        {
            clsDocGiaDTO DocGiaDTO;
            int SoQuyenSachDocGiaDangMuon;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = MaThe;
            SoQuyenSachDocGiaDangMuon = ThuThuBUS.PhieuMuonSachBUS.SoQuyenSachDocGiaDangMuon(DocGiaDTO);

            if (SoQuyenSachDocGiaDangMuon == 0)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Độc giả chưa mượn sách!!",
                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (dgvST.Rows.Count != 0)
                return;

            HienThiThongTinTraSachLenFormTraSach(MaThe);
            DuaSachDocGiaDangMuonLenFormTraSach(MaThe);
        }

        //Phương thức tìm độc giả trả sách TextChanged.
        private bool TimDocGiaTraSachTextChanged(String MaThe)
        {
            clsDocGiaDTO DocGiaDTO;
            int SoQuyenSachDocGiaDangMuon;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = MaThe;
            SoQuyenSachDocGiaDangMuon = ThuThuBUS.PhieuMuonSachBUS.SoQuyenSachDocGiaDangMuon(DocGiaDTO);

            if (SoQuyenSachDocGiaDangMuon == 0)
            {
                return false;
            }

            if (dgvST.Rows.Count != 0)
                return false;

            HienThiThongTinTraSachLenFormTraSach(MaThe);
            DuaSachDocGiaDangMuonLenFormTraSach(MaThe);
            return true;
        }

        //Phương thức đưa những quyển sách độc giả đã mượn lên form Trả sách.
        private void DuaSachDocGiaDangMuonLenFormTraSach(String MaThe)
        {
            clsDocGiaDTO DocGiaDTO;
            DataTable dt;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = MaThe;
            dt = new DataTable();
            dt = ThuThuBUS.PhieuMuonSachBUS.LayDanhSachSachDocGiaDangMuon(DocGiaDTO);

            DuaThongTinSachTraLenDataGridTraSach(dt);
        }

        //Phương thức đưa thông tin lên DataGrid trả sách.
        private void DuaThongTinSachTraLenDataGridTraSach(DataTable dtSachTra)
        {
            if (dtSachTra.Rows.Count > 0)
            {
                Object[] obj;
                int STT;
                clsPMuonSachDTO PMuonSachDTO;
                clsCTMuonTraDTO CTMuonTraDTO;
                String TenSach;

                for (int i = 0; i < dtSachTra.Rows.Count; i++)
                {
                    obj = new Object[12];
                    obj = dtSachTra.Rows[i].ItemArray;

                    CTMuonTraDTO = new clsCTMuonTraDTO();
                    PMuonSachDTO = new clsPMuonSachDTO();

                    STT = i + 1;
                    CTMuonTraDTO.MaSach = obj[6].ToString();
                    TenSach = ThuThuBUS.SachBUS.TimTenTuaSachTheoDKCB(obj[6].ToString());
                    PMuonSachDTO.NgayMuon = Convert.ToDateTime(obj[2]);
                    CTMuonTraDTO.NgayTra = Convert.ToDateTime(obj[5]);
                    CTMuonTraDTO.TrangThaiMT = obj[10].ToString();
                    long Gia = ThuThuBUS.SachBUS.TimGiaCuaMotQuyenSachTheoMa(CTMuonTraDTO.MaSach);

                    dgvST.Rows.Add(STT, CTMuonTraDTO.MaSach, TenSach, Gia.ToString(), PMuonSachDTO.NgayMuon.ToShortDateString(), CTMuonTraDTO.NgayTra.ToShortDateString(), CTMuonTraDTO.TrangThaiMT);
                }
            }
            else
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không tìm thấy sách.\n\n-Vui lòng nhập mã sách khác.",
                                                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Phương thức xóa trắng datagrid.
        private void XoaDataGrid(DevComponents.DotNetBar.Controls.DataGridViewX dgv)
        {
            dgv.Rows.Clear();
        }

        //Phương thức xóa thôn tin độc giả trả sách.
        private void XoaThongTinDocGiaTraSach()
        {
            lblSTHoTen.Text = "";
            lblSTGioiTinh.Text = "";
            lblSTNgheNghiep.Text = "";
            lblSTNgayLapThe.Text = "";
            lblSTNgayHetHan.Text = "";
            lblSTTongNo.Text = "";
            picSTHinh.ImageLocation = "";
        }

        //Hiển thị thông tin độc giả trả sách lên form Trả sách.
        private void HienThiThongTinTraSachLenFormTraSach(String MaThe)
        {
            Object[] obj;
            clsDocGiaDTO DocGiaDTO;
            DataTable dtDocGia;
            String TenLoaiDG;

            dtDocGia = new DataTable();
            dtDocGia = ThuThuBUS.DocGiaBUS.TimDocGia(MaThe);
            obj = new Object[12];
            obj = dtDocGia.Rows[0].ItemArray;

            DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.HoTen = obj[1].ToString();
            DocGiaDTO.GioiTinh = obj[2].ToString();
            TenLoaiDG = obj[3].ToString();
            DocGiaDTO.NgayLapThe = Convert.ToDateTime(obj[4]);
            DocGiaDTO.NgayHetHan = Convert.ToDateTime(obj[5]);
            DocGiaDTO.TongNo = Convert.ToInt64(obj[6]);
            DocGiaDTO.HinhAnh = obj[7].ToString();

            lblSTHoTen.Text = DocGiaDTO.HoTen;
            lblSTGioiTinh.Text = DocGiaDTO.GioiTinh;
            lblSTNgheNghiep.Text = TenLoaiDG;
            lblSTNgayLapThe.Text = DocGiaDTO.NgayLapThe.ToShortDateString();
            lblSTNgayHetHan.Text = DocGiaDTO.NgayHetHan.ToShortDateString();
            lblSTTongNo.Text = DocGiaDTO.TongNo.ToString();

            String url;
            url = Application.StartupPath + @"\" + DocGiaDTO.HinhAnh;
            picSTHinh.ImageLocation = url;
        }

        //Load danh sách loại sách hỏng lên form Trả sách.
        private void LoadDanhSachLoaiSachHong()
        {
            DataTable dt = new DataTable();
            clsSachHongBUS SachHongBUS = new clsSachHongBUS();

            dt = SachHongBUS.DanhSachSachHong();
            cboSTLoaiHong.DataSource = dt;
            cboSTLoaiHong.DisplayMember = "TENHONG";
            cboSTLoaiHong.ValueMember = "MAHONG";
            cboSTLoaiHong.Enabled = false;
        }

        private void DuaDuLieuTraMotQuyenSachLenForm()
        {
            if (dgvST.SelectedRows.Count > 0)
            {
                String DKCB;
                String MaPhieuMuon;
                DateTime NgayTra = new DateTime();
                double SoNgayMuon;
                double SoNgayTre;
                long TienNo = 0;
                long TienCoc = 0;
                long GiaDKCB;

                DKCB = dgvST.SelectedRows[0].Cells["STDKCB"].Value.ToString();
                NgayTra = DateTime.Today;
                SoNgayMuon = ThuThuBUS.DocGiaBUS.SoNgayMuonMotQuyenSach(Convert.ToDateTime(dgvST.SelectedRows[0].Cells["STNgayMuon"].Value));
                SoNgayTre = ThuThuBUS.DocGiaBUS.SoNgayTraTreMotQuyenSach(Convert.ToDateTime(dgvST.SelectedRows[0].Cells["STHanTra"].Value));
                MaPhieuMuon = ThuThuBUS.PhieuMuonSachBUS.TimMaPhieuMuonTheoMaThe_DKCB(txtSTSoThe.Text.Trim(), DKCB).Trim();
                TienCoc = ThuThuBUS.PhieuMuonSachBUS.LayTienDatCocCuaPhieuMuon(MaPhieuMuon);
                GiaDKCB = ThuThuBUS.SachBUS.TimGiaCuaMotQuyenSachTheoMa(DKCB);                

                txtSTDKCB.Text = DKCB;
                txtSTNgayTra.Text = NgayTra.ToShortDateString();
                txtSTSoNgayMuon.Text = SoNgayMuon.ToString();
                txtSTSoNgayTre.Text = SoNgayTre.ToString();
                if (TienCoc == 0)
                    txtSTTienDatCoc.Text = "0";
                else
                    txtSTTienDatCoc.Text = GiaDKCB.ToString();
                
                //txtSTTienDatCoc.Text = ThuThuBUS.PhieuMuonSachBUS.LayTienNoCuaDKCB_PhieuMuon(DKCB,

                TinhTienPhat();
            }
        }

        //Phương thức tính tiền phạt trên form.
        private void TinhTienPhat()
        {
            double TienPhatSachTre = 0;
            double TienPhatSachHong = 0;
            double TienPhat = 0;
            double NoTruoc = 0;
            double TongNo = 0;

            TienPhatSachTre = Convert.ToDouble(txtSTSoNgayTre.Text) * ThayDoiQuyDinhDTO.TienPhatSachTre;
            if (chkSTHong.Checked)
            {
                String MaHong = cboSTLoaiHong.SelectedValue.ToString();
                TienPhatSachHong = Convert.ToDouble(ThuThuBUS.SachHongBUS.LayTienPhatTheoMaLoaiHong(MaHong));
            }

            TienPhat = TienPhatSachTre + TienPhatSachHong;
            NoTruoc = Convert.ToInt64(lblSTTongNo.Text);
            TongNo = TienPhat + NoTruoc;

            txtSTTienPhat.Text = TienPhat.ToString();
            txtSTNoTruoc.Text = NoTruoc.ToString();
            txtSTTongNo.Text = TongNo.ToString();
        }

        //Phương thức trả một quyển sách.
        private void TraSach(String MaSach)
        {
            bool check = false;
            String DKCBTemp;
            String MaPhieuMuonTemp;
            clsCTMuonTraDTO CTMuonTraDTO = new clsCTMuonTraDTO();

            DKCBTemp = txtSTDKCB.Text.Trim();
            MaPhieuMuonTemp = ThuThuBUS.PhieuMuonSachBUS.TimMaPhieuMuonTheoMaThe_DKCB(txtSTSoThe.Text.Trim(), DKCBTemp);
            CTMuonTraDTO.MaPhieuMuon = MaPhieuMuonTemp;
            CTMuonTraDTO.MaSach = txtSTDKCB.Text.Trim();
            CTMuonTraDTO.NgayTra = Convert.ToDateTime(txtSTNgayTra.Text);
            CTMuonTraDTO.SoNgayMuon = Convert.ToInt32(txtSTSoNgayMuon.Text);

            //long TienPhat = 0;
            //if (txtSTTienPhat.Text == "")
            //{
            //    tien
            //}

            TienPhatTraSach += Convert.ToInt64(txtSTTienPhat.Text);


            CTMuonTraDTO.TienPhat = TienPhatTraSach;

            check = ThuThuBUS.CTMuonTraBUS.CapNhatCTMuonTraDaTra(CTMuonTraDTO);
            if (!check)
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("-Không trả sách được!!",
                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            DevComponents.DotNetBar.MessageBoxEx.Show("-Đã trả sách thành công!!",
                                     "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

            //long TienDoc = 
            dgvST.Rows.Remove(dgvST.SelectedRows[0]);
            String MaHong = cboSTLoaiHong.SelectedValue.ToString();
            bool a = ThuThuBUS.SachBUS.CapNhatTrangThaiChuaMuonChoSach(DKCBTemp, MaHong); //Cập nhật trạng thái chưa mượn cho quyển sách. 

            clsPMuonSachDTO PMuonSachDTO = new clsPMuonSachDTO();

            PMuonSachDTO.MaPhieuMuon = MaPhieuMuonTemp;
            PMuonSachDTO.TienNo = ThuThuBUS.CTMuonTraBUS.LayTienNoTatCac_CT_PhieuMuonSach(PMuonSachDTO.MaPhieuMuon);
            PMuonSachDTO.TienDatCoc = ThuThuBUS.PhieuMuonSachBUS.LayTienDatCocCuaPhieuMuon(PMuonSachDTO.MaPhieuMuon); //0;

            bool b = ThuThuBUS.PhieuMuonSachBUS.CapNhatTienNo(PMuonSachDTO);
            long c = PMuonSachDTO.TienNo;
            clsDocGiaDTO DocGiaDTO = new clsDocGiaDTO();
            DocGiaDTO.MaThe = txtSTSoThe.Text.Trim();
            DocGiaDTO.TongNo = ThuThuBUS.PhieuMuonSachBUS.LayTienNoTatCaPhieuMuonSach(DocGiaDTO.MaThe);

            bool e = ThuThuBUS.DocGiaBUS.CapNhatTongNoDocGia(DocGiaDTO);
            
            DataTable dtDocGia = new DataTable();
            dtDocGia = ThuThuBUS.PhieuMuonSachBUS.LayDanhSachSachDocGiaDangMuon(DocGiaDTO);
            if (dtDocGia.Rows.Count == 0)
            {
                DocGiaDTO.TinhTrangNo = "Không Nợ Tài Liệu";
                ThuThuBUS.DocGiaBUS.UpdateTinhTrangNo(DocGiaDTO);
            }
        }
        
        //Xóa thông tin sách đã trả.
        private void XoaThonTinSachDaTra()
        {
            txtSTDKCB.Text = "";
            txtSTNgayTra.Text = "";
            txtSTSoNgayMuon.Text = "";
            txtSTNoTruoc.Text = "";
            txtSTSoNgayTre.Text = "";
            txtSTTienDatCoc.Text = "";
            txtSTTienPhat.Text = "";
            txtSTTongNo.Text = "";
            chkSTHong.Checked = false;
            cboSTLoaiHong.Enabled = false;
        }

        private void buttonX6_Click(object sender, EventArgs e)
        {
            String MaThe;

            XoaThongTinDocGiaTraSach();
            XoaDataGrid(dgvST);
            MaThe = txtSTSoThe.Text.Trim();
            TimDocGiaTraSach(MaThe);
        }

        private void dgvST_SelectionChanged(object sender, EventArgs e)
        {
            if (dgvST.Rows.Count <= 0)
            {
                btnSTTra.Enabled = false;
                XoaThonTinSachDaTra();
                //txtSTSoThe.Text = "";
                txtSTSoThe.Focus();
                txtSTSoThe.SelectAll();
            }
            else
            {
                DuaDuLieuTraMotQuyenSachLenForm();
                btnSTTra.Enabled = true;
            }
        }

        private void chkSTHong_CheckedChanged(object sender, EventArgs e)
        {
            if (dgvST.Rows.Count > 0)
            {
                if (chkSTHong.Checked)
                {
                    TinhTienPhat();
                    cboSTLoaiHong.Enabled = true;
                }
                else
                {
                    TinhTienPhat();
                    cboSTLoaiHong.Enabled = false;
                }
            }
        }

        private void btnSTTra_Click(object sender, EventArgs e)
        {
            String DKCB;

            DKCB = txtSTDKCB.Text.Trim();
            TraSach(DKCB);
           
            int a = 1;
        }

        private void cboSTLoaiHong_SelectionChangeCommitted(object sender, EventArgs e)
        {
            TinhTienPhat();
        }

        private void txtSTSoThe_TextChanged(object sender, EventArgs e)
        {
            String MaThe;
            bool check;

            MaThe = txtSTSoThe.Text.Trim();
            check = TimDocGiaTraSachTextChanged(MaThe);
            if (!check)
            {
                XoaThongTinDocGiaTraSach();
                XoaThonTinSachDaTra();
                XoaDataGrid(dgvST);
                txtSTSoThe.Focus();
            }

            if (dgvST.Rows.Count <= 0)
                btnSTTra.Enabled = false;
            else
                btnSTTra.Enabled = true;
        }

        private void btnSTIn_Click(object sender, EventArgs e)
        {
            FromInAn.FrmInPhieuTra frminphieu = new Presentation.FromInAn.FrmInPhieuTra();

            if (txtSTSoThe .Text =="")
            {
                DevComponents.DotNetBar.MessageBoxEx.Show("Không Thể In Phiếu Được", "Thông Báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                return;
            }
            else
            {
                frminphieu.mathe = txtSTSoThe.Text.Trim();
                frminphieu.Show();
               
            }
        }
    }
}